File-systems, databases, object-systems, and many other key applications frequently issue a transaction to non-volatile memory, and must ensure that the transaction completes before issuing the next transaction, e.g., data for the transaction is usually written into blocks in the block-based non-volatile storage device before updating the file mapping table in storage to point to those set of blocks. As another example, database systems typically write metadata/journal-entries specifying the intent of the next write, then the data itself, followed by additional metadata specifying completion, as part of a database update request—this is a sequence of 3 dependent transactions.